/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import EntradaSalida.Entrada;

/**
 *
 * @author Alejandros y Nelea
 */
public class Juego {

    public static char[][] tableroConsulta;
    public static char[][] tableroPartida;
    public int contadorPartida = 0;
    Entrada entrada = new Entrada();

    /**
     * Método para inicializar el tablero
     *
     * @param tablero - Tablero a inicializar
     * @param relleno - Carácter con el que se inicializa el tablero
     */
    public void inicializarTablero(char[][] tablero, char relleno) {

        for (int i = 0; i < tablero.length; i++) {
            for (int j = 0; j < tablero[i].length; j++) {
                tablero[i][j] = relleno;
            }
        }
    }

    /**
     * Método que se encarga de colocar las minas aleatoriamente en el tablero
     *
     * @param num - Número de minas a colocar
     */
    public void colocarMinasAleatorias(int num) {
        int fila, columna, cont = 0;

        /*Llenamos el tablero de forma aleatoria con la cantidad de bombas 
         *calculadas*/
        do {
            fila = (int) (tableroConsulta.length * Math.random());
            columna = (int) (tableroConsulta.length * Math.random());

            if (tableroConsulta[fila][columna] == 'B') {
                continue;
            } else {
                tableroConsulta[fila][columna] = 'B';
                cont++;
            }
        } while (cont < num);
    }

    /**
     * Método que coloca en cada casilla del tableroConsulta el valor
     * equivalente al número de minas que tiene esa casilla alrededor
     */
    public void numeroMinasPosicion() {

        //Calculamos el numero de minas que tiene cada casilla a su alrededor

        for (int i = 0; i < tableroConsulta.length; i++) {
            for (int j = 0; j < tableroConsulta[i].length; j++) {
                if (tableroConsulta[i][j] == 'B') {
                    continue;
                } else if ((i == 0) && (j == 0)) {
                    if (tableroConsulta[i + 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if ((i == 0) && ((j > 0) && (j
                        < tableroConsulta.length - 1))) {
                    if (tableroConsulta[i + 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if ((i == 0) && (j == tableroConsulta.length - 1)) {
                    if (tableroConsulta[i + 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if (((i > 0) && (i < tableroConsulta.length - 1))
                        && (j == 0)) {
                    if (tableroConsulta[i - 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if (((i > 0) && (i < tableroConsulta.length - 1))
                        && (j == tableroConsulta.length - 1)) {
                    if (tableroConsulta[i - 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if ((i == tableroConsulta.length - 1) && (j == 0)) {
                    if (tableroConsulta[i - 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if ((i == tableroConsulta.length - 1) && ((j > 0)
                        && (j < tableroConsulta.length - 1))) {
                    if (tableroConsulta[i][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else if ((i == tableroConsulta.length - 1)
                        && (j == tableroConsulta.length - 1)) {
                    if (tableroConsulta[i][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                } else {
                    if (tableroConsulta[i - 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i - 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j - 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                    if (tableroConsulta[i + 1][j + 1] == 'B') {
                        tableroConsulta[i][j]++;
                    }
                }
            }
        }
    }

    /**
     * Método que aumenta en 1 la dimensión de un array
     *
     * @param nums - Array a redimensionar
     * @return int[]aux - Array redimensionado
     */
    public int[] redimensionarArray(int[] nums) {
        int[] aux = new int[nums.length + 1];

        //Se copian los datos del array nums al aux
        for (int i = 0; i < nums.length; i++) {
            aux[i] = nums[i];
        }
        return aux;
    }
}
